

/*
 * 文 件 名 : MD5.java
 * 版    权 : China Machi.Co.,Ltd.Copyright 2009-2011.All rights reserved
 * 描    述 : <描述>
 * 修 改 人 : 许洋
 * 修改时间 : 2011-2-11
 * 跟踪单号 : <跟踪单号>
 * 修改单号 : <修改单号>
 * 修改内容 : <修改内容>
 */

package com.fire8.dolphin.utils;
import java.security.MessageDigest;


/**
 * MD5加密解密类
 * <功能详细描述>
 *
 * @author  许洋
 * @version [版本号,2011-2-11]
 * @see     [相关类/方法]
 * @since   [产品/模块]
 */
public final class MD5
{
    
   
    
    /**
     * 字典
     */
    private static final char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6',
            '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
    
    /**
     * 防止实例化
     */
    private MD5()
    {
        
    }
    
    /**
     * 字节转换成十六进制
     * <功能详细描述>
     * @param bytes 字节数组
     * @return 十六进制的字符串
     *
     * @author 许洋
     * @see [类、类#方法、类#成员]
     */
    private static String bytesToHex(final byte[] bytes)
    {
        final StringBuffer resultSB = new StringBuffer();
        int intIndex;
        for (int i = 0; i < 16; i++)
        {
            intIndex = bytes[i];
            if (intIndex < 0)
            {
                intIndex += 256;
            }
            resultSB.append(hexDigits[intIndex >>> 4]);
            resultSB.append(hexDigits[intIndex % 16]);
        }
        return resultSB.toString();
    }
    
    /**
     * MD5加密(32位)
     * <功能详细描述>
     * @param input 待加密的字符串
     *
     * @return String 加密后的字符串
     *
     * @author 许洋
     * @see [类、类#方法、类#成员]
     */
    public static String code(final String input)
    {
        return code(input, 32);
    }
    
    /**
     * MD5加密
     * <功能详细描述>
     * @param input 待加密的字符串
     * @param bit 指定的加密位数
     * @return 加密后的字符串
     *
     * @author 许洋
     * @see [类、类#方法、类#成员]
     */
    public static String code(final String input, final int bit)
    {
        String strResult = "";
        try
        {
            final MessageDigest messdigest = MessageDigest.getInstance(System.getProperty("MD5.algorithm",
                    "MD5"));
            if (bit == 16)
            {
                strResult = bytesToHex(messdigest.digest(input.getBytes("utf-8"))).substring(8,
                        24);
            }
            strResult = bytesToHex(messdigest.digest(input.getBytes("utf-8")));
            
        }
        catch (Exception e)
        {
            LogUtil.e("加密失败", e);
        }
        
        return strResult;
    }
    
   /* public static void main(String[] args)
    {
        String a = MD5.code("fdsfadsf");
        System.out.println(a);
        String b = MD5.code(a);
        System.out.println(b);
        
    }*/
    

}
